home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
tools
/
ask
/
source_
/
keepchk2.s
< prev
next >
Wrap
Text File
|
1999-05-31
|
2KB
|
98 lines
* 指定プログラムが常駐しているかどうか調べる
* 途中まで識別子チェック版
* Oh!X 1992/3 p68+改良
.include doscall.mac
.include pspdef.mac
*
.xdef keepchk2
*
.text
.even
*
keepchk2:
*
*入力
* 4(sp).l 自分自身のメモリ管理ポインタ
* 8(sp).l プログラム先頭から識別文字までのバイト数
* 識別子は0までを比較する。
* 比較しようとする識別子は常駐しているもののそれより短いこと
*出力
* d0.b 常駐しているかどうか
* = 0 ... 常駐していない
* = -1 ... 常駐している
* d1.b Human68kから直接起動されたかどうか
* = 0 ... command.xなどから起動
* = -1 ... Human68kから直接起動
* a0 メモリ管理ポインタ
* d0.b = 0 ... 自分自身のメモリポインタ
* d0.b = -1 ... 見つけた常駐プロセスのメモリポインタ
MYMP = 4+4*3+4*4 * sp,d2-d4/a1-a4
movem.l d2-d4/a1-a4,-(sp)
movem.l MYMP(sp),a0/a4 * a0=メモリーポインタ , a4=識別子オフセット
move.l a0,d4 * 保存
lea.l PSPSIZ(a4),a4
lea.l 0(a0,a4.l),a1 * 識別子アドレス
movea.l a1,a2
moveq.l #-1,d3
@@: addq.w #1,d3
tst.b (a2)+
bne @b * d3.w=識別子の長さ
clr.l -(sp)
DOS _SUPER
move.l d0,(sp)
movea.l MOTHER(a0),a0
move.l MOTHER(a0),d0
seq.b d1
beq chk0
chklp0: movea.l d0,a0
move.l MOTHER(a0),d0
bne chklp0
chk0: moveq.l #-1,d2
chklp1: cmp.b KEEPFLAG(a0),d2
bne chknx1
lea.l 0(a0,a4.l),a2
adda.w d3,a2
cmpa.l MEMEND(a0),a2
bcc chknx1
suba.w d3,a2
movea.l a1,a3 * a1=これを呼び出したプログラム内の識別子
move.w d3,d0
@@: cmpm.b (a3)+,(a2)+
dbne d0,@b
beq found
tst.b -1(a3)
beq found * 不一致が0によるなら一致とみなす
chknx1: move.l NEXTMEM(a0),d0
bne ok
nfound: movea.l d4,a0
bra done
ok: movea.l d0,a0
bra chklp1
found: moveq.l #0,d2
done: tst.b (sp)
bmi skip
DOS _SUPER
skip: addq.w #4,sp
tst.b d2
seq.b d0
movem.l (sp)+,d2-d4/a1-a4
rts
*
.end